package com.shrcl.engineerprocess.domain;

import com.shrcl.engineerprocess.domain.Engineer;
import com.shrcl.engineerprocess.domain.EngineerLevel;
import com.shrcl.engineerprocess.domain.EngineerMonthlyCostStatus;
import com.shrcl.engineerprocess.domain.impl.EngineerMonthlyCostImpl;
import com.shrcl.engineerprocess.domain.proxy.EngineerMonthlyCostProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = EngineerMonthlyCostImpl.class)
public interface EngineerMonthlyCost extends IModelObject {
  public abstract Collection<EngineerLevel> getLevels();
  
  public abstract EngineerMonthlyCost addtoLevels(final EngineerLevel engineerLevel);
  
  public abstract EngineerMonthlyCost setLevels(final Iterable<EngineerLevel> levels);
  
  public abstract EngineerMonthlyCost removeFromLevels(final EngineerLevel engineerLevel);
  
  public abstract EngineerMonthlyCost removeAllLevels();
  
  public abstract Engineer getEngineer();
  
  public abstract EngineerMonthlyCost setEngineer(final Engineer engineer);
  
  public abstract Date getMonth();
  
  public abstract EngineerMonthlyCost setMonth(final Date month);
  
  public abstract Double getCost();
  
  public abstract EngineerMonthlyCost setCost(final Double cost);
  
  public abstract String getMonthStr();
  
  public abstract void checkValid();
  
  public abstract EngineerMonthlyCostStatus getStatus();
  
  public abstract void start();
  
  public abstract void updateCost(final Procedure1<? super EngineerMonthlyCost> updater);
  
  public abstract Boolean isCreated();
  
  public abstract EngineerMonthlyCostProxy toProxy();
}
